{$CLEO .qa}
{$USE CLEO+}
{$USE Audio}
{$USE newOpcodes}
{$USE ini}

0000: NOP

script_name "RPBTL"

// By ArtemQa146

const
    rep_R = 31@
    rep_L = 30@
    refery = 29@
    boombox = 28@
    AudioMusic = 27@
    music_id = 26@
    music_ped = 25@
    coords_x = 24@
    coords_y = 23@
    coords_z = 22@
    angle_1 = 21@
    left = 1
    right = 2
end

0087: coords_x = 0@ // (float)
0087: coords_y = 1@ // (float)
0087: coords_z = 2@ // (float)
0087: angle_1 = 3@ // (float)

if
    0E4D: random_percent 4@
then
else
    repeat
    wait 0
    until not locate_char_distance_to_coordinates $PLAYER_ACTOR pos coords_x coords_y coords_z radius 150.0
    0A93: terminate_this_custom_script
end

    repeat
    wait 0
    04ED: load_animation  "RAPPING"
    until 04EE:   animation "RAPPING" loaded

    model.Load(21)
    model.Load(19)
    model.Load(22)
    model.Load(2102)
    if
        not model.Available(21)
    then
        repeat
        wait 0
        model.Load(21)
        until model.Available(21)
    end
    if
        not model.Available(19)
    then
        repeat
        wait 0
        model.Load(19)
        until model.Available(19)
    end
    if
        not model.Available(22)
    then
        repeat
        wait 0
        model.Load(22)
        until model.Available(22)
    end
    if
        not model.Available(2102)
    then
        repeat
        wait 0
        model.Load(2102)
        until model.Available(2102)
    end
    038B: load_requested_models

    009A: refery = create_actor_pedtype 21 model 21 at coords_x coords_y coords_z
    0173: set_actor refery Z_angle_to angle_1
    0E24: fix_char refery ground 1 brightness 1 and_fade_in 0
    
    04C4: store_coords_to 1@ 2@ 3@ from_actor refery with_offset 1.0 1.2 0.0
    009A: rep_R = create_actor_pedtype 21 model 19 at 1@ 2@ 3@
    0172: 1@ = actor refery Z_angle
    1@ += 90.0
    0173: set_actor rep_R Z_angle_to 1@
    0E24: fix_char rep_R ground 1 brightness 1 and_fade_in 0
    
    04C4: store_coords_to 1@ 2@ 3@ from_actor refery with_offset -1.0 1.2 0.0
    009A: rep_L = create_actor_pedtype 21 model 19 at 1@ 2@ 3@
    0172: 1@ = actor refery Z_angle
    1@ -= 90.0
    0173: set_actor rep_L Z_angle_to 1@
    0E24: fix_char rep_L ground 1 brightness 1 and_fade_in 0
    
    04C4: store_coords_to 1@ 2@ 3@ from_actor refery with_offset 0.0 0.5 0.0
    0E01: create_object_no_save 2102 at 1@ 2@ 3@ offset 0 ground 1 to boombox
    0172: 1@ = actor refery Z_angle
    1@ += 180.0
    0177: set_object boombox Z_angle_to 1@
    
    model.Destroy(21)
    model.Destroy(19)
    model.Destroy(22)
    model.Destroy(2102)
    
    0812: AS_actor refery perform_animation "RAP_B_Loop" IFP "RAPPING" framedelta 2.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1  // versionB
    0812: AS_actor rep_R perform_animation "RAP_C_Loop" IFP "RAPPING" framedelta 2.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1  // versionB
    0812: AS_actor rep_L perform_animation "RAP_A_Loop" IFP "RAPPING" framedelta 2.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1  // versionB
    
    0209: music_id = random_int_in_ranges 1 4
    0AD3: 5@v = string_format "SQ\BR%d.mp3" music_id
    0AC1: AudioMusic = load_audio_stream_with_3d_support 5@v
    0AC3: link_3d_audio_stream AudioMusic to_object boombox
    0AAD: set_audio_stream AudioMusic state 1
    music_ped = right
    timera = 0
    07F7: set_object boombox destructible 0

    repeat
    wait 0
    if and
        056D:   actor rep_R defined
        056D:   actor rep_L defined
        056D:   actor refery defined
        03CA:   object boombox exists
    then
    
        if or
            0118:   actor rep_R dead
            0118:   actor rep_L dead
            0118:   actor refery dead
            051A:   actor rep_R damaged_by_actor $PLAYER_ACTOR
            051A:   actor rep_L damaged_by_actor $PLAYER_ACTOR
            051A:   actor refery damaged_by_actor $PLAYER_ACTOR
            not locate_char_distance_to_coordinates $PLAYER_ACTOR pos coords_x coords_y coords_z radius 120.0
        then
            break
        end
        
        080E: get_actor refery ped_event_to 1@
        080E: get_actor rep_L ped_event_to 2@
        080E: get_actor rep_R ped_event_to 3@
        if or
            1@ == 49
            1@ == 9
            2@ == 49
            2@ == 9
            3@ == 49
            3@ == 9
            not $ACTIVE_INTERIOR == 0
        then
            break
        end
        
        080E: get_actor refery ped_event_to 1@
        080E: get_actor rep_L ped_event_to 2@
        if or
            1@ == 15
            1@ == 31
            1@ == 59
            2@ == 15
            2@ == 31
            2@ == 59
        then
            break
        end
        
        080E: get_actor rep_R ped_event_to 1@
        if or
            1@ == 15
            1@ == 31
            1@ == 59
        then
            break
        end
        
            if or
                0457:   player $PLAYER_CHAR aiming_at_actor refery
                0457:   player $PLAYER_CHAR aiming_at_actor rep_L
                0457:   player $PLAYER_CHAR aiming_at_actor rep_R
            then
                0E83: get_current_char_weaponinfo $PLAYER_ACTOR store_to 1@
                0E89: get_weaponinfo_fire_type 1@ store_to 2@ //     
                if or
                    2@ == 1 //  
                    2@ == 3 //   (  ..)
                then
                    break
                end
            end

    
        //   ,    3       ,   
        0400: store_coords_to 1@ 2@ 3@ from_object boombox with_offset 0.0 0.0 0.0
        0EB2: get_offset_from_camera_in_world_coords 0.0 0.0 0.0 store_to 4@ 5@ 6@
        050A: 1@ = distance_between_XYZ 1@ 2@ 3@ and_XYZ 4@ 5@ 6@
        1@ /= 100.0
        2@ = 0.7
        0063: 2@ -= 1@  // (float)
        if
            2@ < 0.0
        then
            2@ = 0.0
        end
        0ABC: set_audio_stream AudioMusic volume 2@
        
        if
            timera > 20000
        then
            0615: define_AS_pack_begin 1@
            0812: AS_actor -1 perform_animation "Laugh_01" IFP "RAPPING" framedelta 2.0 loopA 0 lockX 1 lockY 1 lockF 0 time -1  // versionB
            0812: AS_actor -1 perform_animation "RAP_B_Loop" IFP "RAPPING" framedelta 2.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1  // versionB
            0616: define_AS_pack_end 1@
            0618: assign_actor refery to_AS_pack 1@
            061B: remove_references_to_AS_pack 1@
            timera = 0
        end
        
        //   
        0AB9: get_audio_stream AudioMusic state_to 1@
        if
            1@ == -1
        then
            0AAE: remove_audio_stream AudioMusic
            if
                music_ped == right
            then
                music_ped = left
                0AD3: 5@v = string_format "SQ\BL%d.mp3" music_id
                0AC1: AudioMusic = load_audio_stream_with_3d_support 5@v
                0AC3: link_3d_audio_stream AudioMusic to_object boombox
                0AAD: set_audio_stream AudioMusic state 1
                0812: AS_actor rep_R perform_animation "RAP_A_Loop" IFP "RAPPING" framedelta 2.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1  // versionB
                0812: AS_actor rep_L perform_animation "RAP_C_Loop" IFP "RAPPING" framedelta 2.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1  // versionB
                wait 300
            else
                music_id += 1
                if music_id > 3
                then music_id = 1
                end
                0AD3: 5@v = string_format "SQ\BR%d.mp3" music_id
                0AC1: AudioMusic = load_audio_stream_with_3d_support 5@v
                0AC3: link_3d_audio_stream AudioMusic to_object boombox
                0AAD: set_audio_stream AudioMusic state 1
                music_ped = right
                0812: AS_actor rep_R perform_animation "RAP_C_Loop" IFP "RAPPING" framedelta 2.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1  // versionB
                0812: AS_actor rep_L perform_animation "RAP_A_Loop" IFP "RAPPING" framedelta 2.0 loopA 1 lockX 1 lockY 1 lockF 0 time -1  // versionB
                wait 300
            end
        end

    else
        break
    end
    until not player.Defined(0)
    if
        locate_char_distance_to_coordinates $PLAYER_ACTOR pos coords_x coords_y coords_z radius 120.0
    then
        if 056D:   actor rep_L defined
        then 01C2: remove_references_to_actor rep_L // Like turning an actor into a random pedestrian
        end
        if 056D:   actor rep_R defined
        then 01C2: remove_references_to_actor rep_R // Like turning an actor into a random pedestrian
        end
        if 056D:   actor refery defined
        then 01C2: remove_references_to_actor refery // Like turning an actor into a random pedestrian
        end
        if 03CA:   object boombox exists
        then 01C4: remove_references_to_object boombox // This object will now disappear when the player looks away
        end
    else
        if 056D:   actor rep_L defined
        then 009B: destroy_actor rep_L
        end
        if 056D:   actor rep_R defined
        then 009B: destroy_actor rep_R
        end
        if 056D:   actor refery defined
        then 009B: destroy_actor refery
        end
        if 03CA:   object boombox exists
        then 0108: destroy_object boombox
        end
    end
    0AAE: remove_audio_stream AudioMusic
    04EF: release_animation "RAPPING"
    
    
    
    
0A93: terminate_this_custom_script
